Skip to content

Conversation

@ChoiWheatley
Copy link
Collaborator

@ChoiWheatley ChoiWheatley commented Feb 6, 2025

주요 변경 사항

  1. 앱 모듈 수정 (src/app.module.ts)

    • 데이터베이스 연결 설정에서 subscribers 옵션에 있던 ImageQuerySubscriber를 주석 처리하였습니다.
    • 주석에는 향후 테스트 모듈로 이전할 예정임을 명시하여, 추후 테스트 환경과 프로덕션 환경 간의 구분을 명확히 할 수 있도록 하였습니다.
  2. 댓글 서비스 개선 (src/features/comment/comment.service.ts)

    • 기존에 findOne 메서드를 사용하여 단일 엔티티를 조회하던 부분을 QueryBuilder 기반의 접근 방식으로 전환하였습니다.
    • 작성자(author) 및 댓글(comment) 데이터를 조회할 때, imageInstanceManager.mapImage를 호출하여 관련 이미지 정보를 함께 매핑하도록 변경하였습니다.
    • 이로써, 각 엔티티와 연관된 이미지 정보를 동적으로 매핑하는 로직이 서비스 레이어에서 더욱 깔끔하게 처리됩니다.
  3. 이미지 인스턴스 매니저 강화 (src/features/image/image-instance-manager.ts)

    • mapImage 메서드에 상세한 주석과 함께 JSDoc을 추가하여, 해당 메서드가 엔티티의 메타데이터를 기반으로 적절한 join 조건을 생성하는 방식과 동작 방식을 명확하게 문서화하였습니다.
    • 엔티티의 종류에 따라(User, Funding, Gift) 매핑에 필요한 ID 필드와 이미지 타입을 자동으로 판단하여 join을 처리합니다.
    • 새로 추가된 mapImages 메서드는 다수의 이미지 매핑 상황에 유연하게 대응할 수 있도록 설계되었습니다.
    • 코드 포맷팅과 인자 정렬 등의 리팩토링을 통해 가독성과 유지보수성을 개선하였습니다.
  4. 쿼리 카운팅 테스트 추가 (src/features/image/image-query.spec.ts)

    • 새로운 테스트 파일을 통해, TypeORM의 QueryBuilder를 활용한 SQL 쿼리 실행 횟수를 검증할 수 있도록 하였습니다.
    • 테스트 모듈 생성 후 데이터 소스에 쿼리 이벤트 리스너를 등록하여, 실제 실행되는 쿼리 수를 확인하고 로그로 출력합니다.
    • 이를 통해, 쿼리 최적화 및 예상 쿼리 실행 횟수를 보장하는 테스트 케이스를 추가하였습니다.
  5. 이미지 쿼리 서브스크라이버 도입 (src/tests/query-subscriber.ts)

    • Image 엔티티에 대한 모든 SQL 쿼리 실행 횟수를 모니터링하는 ImageQuerySubscriber를 추가하였습니다.
    • 이 서브스크라이버는 쿼리 실행 전후로 카운트를 증가시키며, 디버깅 및 성능 분석에 활용할 수 있습니다.

기대 효과

  • 쿼리 최적화: QueryBuilder 사용 및 이미지 매핑 로직의 일원화로 불필요한 쿼리 호출을 줄이고, SQL 쿼리 실행 횟수를 효과적으로 모니터링할 수 있습니다.
  • 코드 가독성 및 유지보수성 향상: 주석과 JSDoc을 통한 문서화 및 리팩토링을 통해, 후속 개발자가 코드를 보다 쉽게 이해하고 확장할 수 있도록 개선하였습니다.
  • 테스트 및 모니터링 강화: 쿼리 카운팅 테스트와 서브스크라이버 도입으로, 데이터 액세스 로직의 성능 모니터링과 문제 발견이 용이해졌습니다.
  • 향후 개선 방향: 테스트 모듈로의 subscribers 이전 등, 도메인 간의 명확한 경계 설정 및 모듈 분리를 통해, DDD 원칙에 더욱 부합하는 구조로 발전시킬 예정입니다.

이번 PR은 전반적으로 데이터 조회 로직과 이미지 매핑 방식의 일관성 및 성능 개선을 목표로 진행되었습니다. 향후 테스트 환경과 프로덕션 환경 간의 분리를 통해, 더 안정적이고 유지보수하기 쉬운 시스템으로 발전시킬 수 있을 것으로 기대합니다.

감사합니다.

@ChoiWheatley ChoiWheatley changed the title feat(query-subscriber): Add ImageQuerySubscriber for counting statements WISH-391 - Add ImageQuerySubscriber for counting statements Feb 6, 2025
@ChoiWheatley ChoiWheatley changed the title WISH-391 - Add ImageQuerySubscriber for counting statements WISH-391 - Image Instance Manager 에서의 N+1 query 문제 해결 Feb 6, 2025
Copy link
Owner

@coding-jjun coding-jjun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@coding-jjun coding-jjun merged commit 9059f41 into main Feb 6, 2025
@ChoiWheatley ChoiWheatley deleted the WISH-391-Fix-N+1-Image-Query branch February 9, 2025 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants